package com.example.user_manage.result;

import com.example.user_manage.enums.REnum;
import lombok.Builder;
import lombok.Getter;

/**
 * 结果封装类
 * @param <T> 携带的数据类型
 */
@Builder
@Getter
public class R<T>{
    /**
     * 状态码
     */
    private String code;
    /**
     * 描述信息
     */
    private String message;
    /**
     * 要携带的数据
     */
    private T data;

    /**
     * 正常运转，访问成功。
     * @param rEnum R对象枚举类
     * @param data 携带的数据
     * @return 结果封装对象
     * @param <T> 携带的数据类型
     */
    public static <T> R<T> ok(REnum rEnum,T data){
        return R.<T>builder()
                .code(rEnum.getCode())
                .message(rEnum.getMessage())
                .data(data)
                .build();
    }

    /**
     * 正常运转，访问成功（没有携带的数据）
     * @param rEnum R对象枚举类
     * @return 结果封装对象
     */
    public static <T> R<T> ok(REnum rEnum){
        return R.<T>builder()
                .code(rEnum.getCode())
                .message(rEnum.getMessage())
                .build();
    }


    /**
     * 失败
     * @param code 状态码
     * @param message 描述信息
     * @return 结果封装对象
     * @param <T> 携带的data数据乐行
     */
    public static <T> R<T> fail(String code,String message){
        return R.<T>builder()
                .code(code)
                .message(message)
                .build();
    }

}
